'use strict';

const crypto = require('crypto');

// 生成token
const generateToken = (code, deviceId) => {
  const secret = process.env.TOKEN_SECRET || 'your-secret-key';
  const data = `${code}:${deviceId}:${Date.now()}`;
  return crypto.createHmac('sha256', secret).update(data).digest('hex');
};

// 获取设备ID
const getDeviceId = async (context) => {
  try {
    const { CLIENTUA, PLATFORM } = context;
    if (!CLIENTUA) return null;
    
    // 使用平台和用户代理生成设备ID，适配云手机环境
    const deviceInfo = `${PLATFORM}:${CLIENTUA}`;
    return crypto.createHash('md5').update(deviceInfo).digest('hex');
  } catch (error) {
    console.error('获取设备ID失败:', error);
    return null;
  }
};

// 主函数
exports.main = async (event, context) => {
  const { code } = event;
  
  // 验证卡密是否为空
  if (!code) {
    return { success: false, message: '卡密不能为空' };
  }

  try {
    // 获取设备ID
    const deviceId = await getDeviceId(context);
    if (!deviceId) {
      return { success: false, message: '无法获取设备信息' };
    }

    const db = uniCloud.database();
    const codeCollection = db.collection('activation_codes');
    
    // 查询卡密（未使用或同一设备的已使用卡密）
    const { data } = await codeCollection.where({
      code,
      $or: [
        { status: 'unused' },
        { status: 'used', deviceId }
      ]
    }).get();

    if (data.length > 0) {
      const codeInfo = data[0];
      
      // 检查卡密是否绑定其他设备
      if (codeInfo.status === 'used' && codeInfo.deviceId !== deviceId) {
        return { success: false, message: '该卡密已在其他设备使用' };
      }
      
      // 生成token
      const token = generateToken(code, deviceId);
      
      // 更新卡密信息
      await codeCollection.where({ code }).update({
        status: 'used',
        deviceId,
        lastLoginTime: Date.now(),
        deviceInfo: {
          platform: context.PLATFORM || '',
          ua: context.CLIENTUA || ''
        },
        lastLoginIP: context.CLIENTIP || '',
        updateTime: Date.now()
      });

      return {
        success: true,
        token,
        deviceId,
        message: '登录成功'
      };
    }

    // 检查卡密是否被禁用
    const disabledCode = await codeCollection.where({
      code,
      status: 'disabled'
    }).get();
    
    if (disabledCode.data.length > 0) {
      return { success: false, message: '该卡密已被禁用' };
    }
    
    return { success: false, message: '卡密无效或已被其他设备使用' };
  } catch (error) {
    console.error('登录验证失败:', error);
    return { success: false, message: '登录验证失败，请稍后重试' };
  }
};